<?php 

/**
 * 各种验证函数
 * @author seyo
 *
 */
class validator
{
	/**
	 *
	 * 参数检查
	 * @param array $param 传进来的原始数组，如GET或POST参数
	 * @param array $valid_param_arr 格式数组 array('a' => array('type'=>'int','default'=>'1','allow_null'=>'1'))
	 * @return 返回数组则正确，字符串为错误信息
	 */
	public function param_valid_check($param, $valid_param_arr, $exit = 0)
	{
		$ret_arr = array();
		foreach ($valid_param_arr as $p => $form_arr) {
			!is_array($form_arr) && $form_arr = array('type' => $form_arr);
	
			if (! isset($param[$p]) && isset($form_arr['default'])) {
				$origin_p = $form_arr['default'];
			} else {
				$origin_p = trim($param[$p]);
				switch ($form_arr['type']) {
					case 'string' :
						$origin_p = (string)$origin_p;
						break;
					case 'int' :
						$origin_p = (int)$origin_p;
						break;
					case 'float' :
						$origin_p = (float)$origin_p;
						break;
					case 'money' :
						$r = '/^\d+(\.\d{1,2})?/';
						preg_match($r, $origin_p, $m);
						$origin_p = isset($m[0]) ? (float)$m[0] : 0;
						break;
					case 'in_array' :
						if (! in_array($origin_p, $form_arr['array'])) {
							$origin_p = $form_arr['default'];
						}
						break;
					case 'func' :
						if (function_exists($form_arr['func_name'])) {
							$origin_p = $form_arr['func_name']($origin_p);
						}
						break;
					case 'regex' :
						if (! preg_match($form_arr['regex_value'], $origin_p)) {
							$origin_p = $form_arr['default'];
						}
						break;
					default :
						$origin_p = $origin_p;
				}
					
				if (empty($form_arr['allow_null']) && empty($origin_p)) {
					$msg = "{$p} 请重填";
					if ($exit) {
						$rs = array('result' => 'error', 'data' => $param, 'msg' => $msg);
						exit(json_encode($rs)); 
					} else {
						return $msg;
					}
				}
					
			}

			$ret_arr[$p] = $origin_p;
		}
		return $ret_arr;
	}
}